
/**
 * Created by Administrator on 2017/9/5.
 */
'use strict'

// 这句的意思就是引入 `express` 模块，并将它赋予 `express` 这个变量等待使用。
var express = require('express');
// Cheerio 是一个Node.js的库， 它可以从html的片断中构建DOM结构，然后提供像jquery一样的css选择器查询
var cheerio = require('cheerio');
var superagent = require('superagent');
// 调用 express 实例，它是一个函数，不带参数调用时，会返回一个 express 实例，将这个变量赋予 app 变量。
var app = express();

var query=require("./mysql_pool");

// app 本身有很多方法，其中包括最常用的 get、post、put/patch、delete，在这里我们调用其中的 get 方法，为我们的 `/` 路径指定一个 handler 函数。
// 这个 handler 函数会接收 req 和 res 两个对象，他们分别是请求的 request 和 response。
// request 中包含了浏览器传来的各种信息，比如 query 啊，body 啊，headers 啊之类的，都可以通过 req 对象访问到。
// res 对象，我们一般不从里面取信息，而是通过它来定制我们向浏览器输出的信息，比如 header 信息，比如想要向浏览器输出的内容。这里我们调用了它的 #send 方法，向浏览器输出一个字符串。
app.get('/', function (req, res) {
    // 定义网络爬虫的目标地址：内涵段子主页
    var url = 'http://neihanshequ.com/bar/1/';
    // 用 superagent 去抓取 内涵段子 的内容
    superagent.get(url)
    .end(function (err, sres) {
        //错误处理
        if(err){
            return false;
        }
        // sres.text 里面存储着网页的 html 内容，将它传给 cheerio.load 之后
        // 就可以得到一个实现了 jquery 接口的变量，我们习惯性地将它命名为 `$`
        // 剩下就都是 jquery 的内容了
        var $ = cheerio.load(sres.text);
        var items = [];
        //  querySql 语句
        var querySql = 'SELECT `data_group_id` FROM `news` WHERE `data_group_id`=?';
        //  addSql 语句
        var addSql = 'INSERT INTO `news`(`title`,`type`,`content`,`username`,`avatar`,`reprint`,`comment`,`praise`,`browse`,`collect`,data_group_id,data_date)VALUES(?,?,?,?,?,?,?,?,?,?,?,?)';
        $('#detail-list li').each(function (idx, element) {
            var $element = $(element);
            if($element.find('.title').children('p').text().substr(0,10)!=''){
                var data_group_id =$element.children('.detail-wrapper').children('.options').attr('data-group-id');
                //  sql 参数
                var addSqlParams=[];
                addSqlParams.push($element.find('.title').children('p').text().substr(0,10));
                addSqlParams.push(1);
                addSqlParams.push($element.find('.title').children('p').text());
                addSqlParams.push($element.find('.name').text());
                addSqlParams.push($element.children('.detail-wrapper').children('.header').children('a').children('img').attr('data-src'));
                addSqlParams.push($element.find('.share').text());//转载
                addSqlParams.push($element.find('.comment').text());//评论
                addSqlParams.push($element.find('.digg').text());//点赞
                addSqlParams.push(0);//浏览
                addSqlParams.push($element.find('.repin').text());//浏览
                addSqlParams.push(data_group_id);//数据ID
                addSqlParams.push(Trim($element.find('.time ').text()));//数据时间
                //查询数据是否存在
                query(querySql,[data_group_id], function(err,result){
                    if (err) {
                        console.log('[SELECT ERROR] - ',err.message);
                        return;
                    }
                    if(result.length==0){
                        query(addSql,addSqlParams, function(err,result){
                            if (err) {
                                console.log('[INSERT ERROR] - ',err.message);
                                return;
                            }
                            var myDate = new Date();
                            console.log('--------------------------新闻数据,ID:【'+data_group_id+'】添加成功,时间【'+myDate.toLocaleString()+'】----------------------------');
                        });
                    }
                });
                items.push({
                    name:$element.find('.name').text(),
                    data_group_id:data_group_id,
                    avatar:$element.children('.detail-wrapper').children('.header').children('a').children('img').attr('data-src'),
                    date:Trim($element.find('.time ').text()),
                    title:$element.find('.title').children('p').text().substr(0,10),
                    content:$element.find('.title').children('p').text(),
                    praise:$element.find('.digg').text(),//赞
                    comment:$element.find('.comment').text(),//评论
                    reprint:$element.find('.share').text(),//转载
                    collect:$element.find('.repin').text(),//收藏
                })
            }
        })
        res.send(items);
    })
});

//去掉字符串前后所有空格：
function Trim(str){
    return str.replace(/(^\s*)|(\s*$)/g, "");
}
// 定义好我们 app 的行为之后，让它监听本地的 3000 端口。这里的第二个函数是个回调函数，会在 listen 动作成功后执行，我们这里执行了一个命令行输出操作，告诉我们监听动作已完成。
app.listen(9999, function () {
    console.log('app is listening at port 9999');
});